home *** CD-ROM | disk | FTP | other *** search
/ Chip 1996 April / CHIP 1996 aprilis (CD06).zip / CHIP_CD06.ISO / hypertxt.arj / 9408 / SOURCER.CD < prev    next >
Text File  |  1994-11-23  |  18KB  |  313 lines

  1.           @VA Sourcer 5.12 és a Windows Source 2.04@N
  2.  
  3.           @VDisassembler Windowshoz@N
  4.  
  5.           Mindenkit  érhet  ""baleset",  még  egy  programozót is. Nem
  6.           kell  valami  csontszaggató  szörnyûségre gondolni, elég egy
  7.           meggondolatlanul  kiadott  DEL  parancs  is,  máris  oda  az
  8.           értékes forráskód.
  9.  
  10.  
  11.  
  12.  
  13.           Egy   programozó   ismerôsöm   nemrég  DES-titkosítást  törô
  14.           programot  keresett  --  sikertelenül.  Néhány évvel ezelôtt
  15.           egy    jól    sikerült    fejlesztés    végén   az   értékes
  16.           programforrásokat  egy  jelszóvédett  ZIP file-ba rejtette a
  17.           kíváncsi  kollégák  elôl,  majd  az egészet félretette szebb
  18.           idôkre.   A  továbbfejlesztés  ideje  elérkezett,  a  jelszó
  19.           elfelejtôdött.  Nincs  mit  tenni,  a  programot vissza kell
  20.           fejteni.
  21.  
  22.           Rövidebb  programokat akármilyen debuggerrel is vissza lehet
  23.           gombolyítani,   nagyobbakat   már   csak   céleszközzel   --
  24.           disassemblerrel  lehet.  A V Communications, Inc. termékét a
  25.           Sourcert  a  programozók  már  régóta  ismerik,  az új, 5.12
  26.           verziót   mégis  érdemes  bemutatni  néhány  fontos  újítása
  27.           miatt.
  28.  
  29.           A   Sourcer  .COM,  .EXE  és  berendezés-meghajtó  programok
  30.           teljes  vagy  meghatározott  részének,  illetve  gépünk  egy
  31.           magadott    memóriaterületének    visszafordítására   képes.
  32.           Bármilyen  processzor  kódját képes visszafejteni a 8086-tól
  33.           a  Pentiumig a valós és a védett üzemmódban. Ismeri az Intel
  34.           processzorok     nem    publikált    utasításait    is.    A
  35.           visszafordítható  program mérete 300 Kbyte, de EMS támogatás
  36.           esetén jóval nagyobb is lehet.
  37.  
  38.           A  fordítás eredménye választásunktól függôen vagy egy lista
  39.           (.LST),  vagy  egy  assembler forrásfile-ba (.ASM) kerülhet.
  40.           Ez  utóbbi  kiegészíthetô, javítható, majd újrafordítható. A
  41.           lista  változat  nem  fordítható  le  újra,  azonban  sokkal
  42.           érthetôbb.  A  lista  változat  esetén kérhetünk teljes vagy
  43.           részleges  kereszthivatkozási  listát,  vagyis  azt,  hogy a
  44.           Sourcer   minden   változóhoz,   ugrási  címkéhez  írja  oda
  45.           megjegyzésként,  hogy  hol  hivatkoztak  rá. Részleges lista
  46.           esetén   kizárhatjuk   a   kereszthivatkozási   listából   a
  47.           szubrutinok  belépési  pontjait,  vagy  az  ugrási címkéket.
  48.           Emellett  a  listafile-unk  végére  kérhetünk I/O használati
  49.           táblázatot  (output  synopsis) is. Ez a táblázat felsorolja,
  50.           hogy  a  visszafejtett  program  milyen megszakításokat, DOS
  51.           funkciókat   és   I/O   portokat  használ.  Ismeretlen  vagy
  52.           vírusgyanús  program  mûködésérôl  már  ez a kis táblázat is
  53.           elegendô kezdeti információt adhat.
  54.  
  55.           A  lista  formátumot  az  LST2ASM  segédprogrammal assembler
  56.           formátumúvá    alakíthatjuk,    így    hosszabb    programok
  57.           idôigényes,    másodszori    visszafordítása    elkerülhetô.
  58.           Kiválaszthatjuk,   mely   assembler   formátumnak  megfelelô
  59.           eredményt  kérünk.  A felkínált lehetôségek: a MASM a 6.1-es
  60.           verzióig,  a  Turbo  Assembler  (TASM)  a  3.2-es  verzióig,
  61.           illetve  az  OPTASM  formátuma.  Az  új  Sourcer  verzió nem
  62.           elégszik  meg a kimeneti formátum beállításával, megadhatjuk
  63.           azt  is,  hogy  egy  esetleges  újrafordítás  után létrejött
  64.           program     mennyire    hasonlítson    az    eredetire.    A
  65.           visszafordítást  lehet  funkcionálisan, méretre vagy byte-ra
  66.           azonosan  kérni.  E  látszólag  értelmetlen funkciónak akkor
  67.           van  értelme,  ha  az  újrafordítást végzô assembler fordító
  68.           felesleges  NOP-okat  rak be az ugróutasítások után a kódba.
  69.           A  keletkezô  elcsúszások  és az esetleges konstans értéknek
  70.           visszafordított   adatcímek   miatt   keletkezô   titokzatos
  71.           programhibákat lehet megelôzni a helyes paraméterezéssel.
  72.  
  73.           Sok  program  a lebegôpontos koprocesszor hívásokat -- annak
  74.           hiányában  --  szoftvermegszakításokkal emulálja (INT 34h --
  75.           INT  3Fh).  Kérésre  ezeket  az  interruptokat  a  megfelelô
  76.           utasításokká  fordíthatjuk  vissza.  Régi, koprocesszort nem
  77.           használó,   de   azt   emuláló   programjainkat   jelentôsen
  78.           felgyorsíthatjuk a koprocesszor beszerzése után.
  79.  
  80.           A  visszafejtési  eljárás  2-9  menetben  zajlik.  2-5 menet
  81.           esetén  eléggé  nyers  listát  kapunk, nem sokkal bôvebbet a
  82.           Debugból  kicsikarhatónál.  (Például  2 menet esetén csak az
  83.           ugrási  címek  jelennek meg szimbolikusan, a változóké nem.)
  84.           6-9  menetes  visszafordításkor  már  rendelkezésünkre áll a
  85.           kereszthivatkozási  lista,  valamint  az  indexelt  indirekt
  86.           vezérlésátadások  ugrótábláit  is tisztességesen felderíti a
  87.           program,    és    azokat    megfelelô   @KDW   címke,címke,...@N
  88.           táblázatokká alakítja.
  89.  
  90.           A  Sourcer  fô  elônye  a különbözô disassemblerekhez képest
  91.           az,  hogy  nemcsak  az  adat-  és  ugrási  címhivatkozásokat
  92.           analizálja,  hanem  az egész program mûködését figyeli. A DS
  93.           és    ES    szegmensregiszter   programon   belüli   értékét
  94.           nyilvántartja,  így  az adathivatkozásoknál mindig láthatjuk
  95.           a  használt  változó  szegmenshelyes címét. Több szegmensbôl
  96.           álló  programok  esetén  a Sourcer képes a szegmenshatárokat
  97.           felderíteni, azoknak szimbolikus nevet adni.
  98.  
  99.           Hasonló  alapossággal jár el a Sourcer az interrupt belépési
  100.           pontok  felderítésében  is.  Ha  érzékeli,  hogy  a  program
  101.           magára   irányít   egy   interrupt  vektort,  akkor  az  így
  102.           megcímzett   interrupt  rutin  be-  és  kilépési  pontjainál
  103.           jelzi, hogy a rutin mely megszakítást valósítja meg.
  104.  
  105.           A  saját  kódját  (például  egy  JMP  utasítás ugrási címét)
  106.           átíró  programot kérésünkre kódfolytonosan is visszafejtheti
  107.           a  Sourcer,  de  a  ""disznóság"  láthatóbbá  tétele  végett
  108.           címkézett  adatmezô  (DB  n,n,n...) is kerülhet az elkészült
  109.           listába.
  110.  
  111.           Kiválaszthatjuk,    hogy    kódként   vagy   adatterületként
  112.           fordítsa-e  vissza  a Sourcer azokat a területeket, melyekre
  113.           látszólag   sehonnan   sem   történt   hivatkozás.  Ezzel  a
  114.           módszerrel  azokat  a  kódrészeket is visszanyerhetjük, amik
  115.           ""szabálytalan"   vezérlásátadással   kerülnek   meghívásra.
  116.           (Például PUSH SEG_RUT -- PUSH OFFSSET_RUT -- RETF.)
  117.  
  118.  
  119.                           @VMagyarázó megjegyzések@N
  120.  
  121.           A  Sourcer  másik  nagy  erôssége  az,  hogy  megjegyzéseket
  122.           fûzhet   a   visszafejtett  programhoz,  akár  annak  minden
  123.           sorához  is. Az alábbi fajták közül választhatunk egyet vagy
  124.           többet:
  125.  
  126.           @V*@N  Adat  címe,  értéke.  Az  adatra hivatkozó utasítás mellé
  127.           megkapjuk  az  adat  szegmenshelyes  címét  (lásd  feljebb),
  128.           valamint az adat programbetöltéskori kezdôértékét.
  129.  
  130.           @V*@N Kereszthivatkozási lista (lásd feljebb).
  131.  
  132.           @V*@N  Interrupt,  DOS-funkció  és  I/O  port  használat  esetén
  133.           azt   tudhatjuk   meg,   hogy   az  adott  megszakítás  vagy
  134.           portkezelés      mit      valósít      meg.     Többfunkciós
  135.           szoftver-megszakítások  (például INT 10H, INT 21H) esetén az
  136.           aktuális  alfunkciót  is felismeri. Kellemes meglepetés volt
  137.           számomra  az,  hogy  a legtöbb nem publikált interruptról és
  138.           DOS-funkcióról   is  információt  ad  a  Sourcer.  Az  újabb
  139.           Sourcer  változatok  a  legfontosabb  DOS kiegészítéseket is
  140.           ismerik, például a DPMI és MSCDEX hívásokat.
  141.  
  142.           @V*@N    Egyebek:   például   a   feltételes   ugró   utasítások
  143.           feltételének szöveges kiírása.
  144.  
  145.           Elmondhatjuk,  hogy  a Sourcer kódvisszafejtési hatékonysága
  146.           megegyezik   egy,   már  nem  kezdô,  de  nem  is  túlzottan
  147.           gyakorlott  assembler  programozóéval.  Az eredményül kapott
  148.           file   kisebb  hibáinak  kijavításához,  saját  megjegyzések
  149.           hozzáfûzéséhez,  valamint  a  nem  túl  beszédes  címkenevek
  150.           átszerkesztéséhez  hozzákezdhetünk magunk is, de jobb ezt is
  151.           a  Sourcerre  bízni.  A Sourcer ugyanis képes két külsô file
  152.           segítségével     tökéletes,     az     eredeti     assembler
  153.           forrásszöveggel   összemérhetô,   vagy  azt  felül  is  múló
  154.           forrásanyag készítésére.
  155.  
  156.           Az  egyik  ilyen  file  a  visszafejtést vezérlô úgynevezett
  157.           definíciós  file (.DEF). Ez egy bármilyen szövegszerkesztôbe
  158.           betölthetô  ASCII  file,  ami  képes  mindazt az információt
  159.           megadni  a  Sourcer  számára,  amit  a  menükön belül nekünk
  160.           kellene  beütnünk.  Azaz az input és output file-neveket, az
  161.           analízis   opciókat,  a  használandó  megjegyzések  típusát,
  162.           valamint   a   készítendô   forrásfile-ra  vonatkozó  formai
  163.           követelményeket.  A definíciós file fô szerepe azonban abban
  164.           van,     hogy    egy    korábbi    visszafejtésbôl    okulva
  165.           rákényszerítsük    a    Sourcert   az   általunk   kigondolt
  166.           szimbólumnevek,      megjegyzések     és     szegmenshatárok
  167.           használatára.
  168.  
  169.           Alkalmunk  van  átdefiniálni  azokat  a  programterületeket,
  170.           amelyeket  a  Sourcer elôzôleg hibásan fejtett vissza (kódot
  171.           adatként  vagy  viszont). Meg kell adnunk a programnak, hogy
  172.           helyesen   mit   kell  tennie.  A  saját  szimbólumnevek  és
  173.           megjegyzések   használata   segíti   a  program  megértését,
  174.           javítja    az    olvashatóságát.    Az   általunk   megadott
  175.           segment:offset    címû    szubrutinoknak,    címkéknek    és
  176.           változóknak   beszédes  neveket  adhatunk,  meghatározhatjuk
  177.           azokat  a  megjegyzéseket  is,  amelyeket  ezen helyek mellé
  178.           kell   írnia   a   Sourcernek,   de   megadhatjuk  azokat  a
  179.           megjegyzéseket  is,  melyeket az így definiált szimbólumokra
  180.           hivatkozó  sorokban  szeretnénk  látni. Az így meghatározott
  181.           megjegyzések  maximum  64  karakter hosszúak lehetnek. Ha ez
  182.           kevésnek  bizony,  akkor  van szükség a megjegyzésfile-okra.
  183.           Egy   ilyen,   REM  kiterjesztésû  file  több,  sorszámokkal
  184.           ellátott,   akár   több  sorban  is  folytatódó  megjegyzést
  185.           tartalmazhat.  A Sourcer programlemez tartalmaz több .DEF és
  186.           .REM     file-t,    amiket    kedvünkre    felhasználhatunk,
  187.           átszerkeszthetünk.  Ha  a  Sourcernek  nem adunk meg kezdeti
  188.           definíciós  file-okat,  akkor a visszafordítás végén generál
  189.           egyet  a  menüben  beállított  paraméterek  alpján,  így egy
  190.           másodszori,    hibajavító,    commentezô   fordításhoz   már
  191.           rendelkezésünkre áll a definíciós állomány gerince.
  192.  
  193.  
  194.                            @VA Windows kiegészítés@N
  195.  
  196.           A  Sourcernek kétfajta kiegészítôje van: a BIOS Preprocessor
  197.           és  a  Windows Source. Mindkét kiegészítés preprocesszorként
  198.           mûködik,  azaz  a  Sourcer  számára  készít  egy  definíciós
  199.           file-t,  ami  alapján  az képes a visszafejtést elkészíteni.
  200.           Az  elôbbi  a PC-kben található ROM-ok, elsôsorban a BIOS és
  201.           a  VGA  kártya vezérlôprogramjainak visszafejtésére szolgál.
  202.           Jól  használható  program,  csak  ritkán  van  szükség rá; a
  203.           ROM-ok   tartalmára   nem   túl  gyakran  van  szüksége  egy
  204.           programozónak,   ezek,   valamint  a  hozzájuk  tartozó  RAM
  205.           adatterületek  a  PC-k talán legjobban dokumentált részei. A
  206.           Windows  Source  az  5.0-ás  Sourcertôl  kezdve használható,
  207.           megjelenése régi égetô hiányt szüntetett meg.
  208.  
  209.           A  Windows  Source  jelenleg  a Windows 3.1 és a Windows for
  210.           Workgroups  3.1  programjait képes visszafejteni, a WIN 3.11
  211.           és  NT  applikációkat  nem. Segítségével a DOS végrehajtható
  212.           file-jain  túl  az  alábbi  programtípusok is értelmezhetôek
  213.           lesznek a Sourcer számára:
  214.  
  215.           @V*@N  16  bites  New  EXE  (NE)  felépítésû  programok: ilyen a
  216.           legtöbb  Windows  program, a DLL-ek, valamint az OS/2 néhány
  217.           berendezés-meghajtó   programja   és   a   PharLap   286/DOS
  218.           Extendere is.
  219.  
  220.           @V*@N   32   bites   Linear  Executable  (LE)  programok:  ilyen
  221.           például a védett módú Windows DPMI hostja.
  222.  
  223.           @V*@N  VxD  meghajtók,  azaz  a  védett  módú,  32 bites Windows
  224.           kernelt    a    valós    módban   futó   berendezés-meghajtó
  225.           programjaihoz  (video, billentyûzet stb.) kapcsoló interface
  226.           programok.
  227.  
  228.           És  amit  nem  képes  kibontani:  P-kódot  és a Visual Basic
  229.           FRM-jeit  tartalmazó  programok. Ezek a formátumok egy belsô
  230.           interpretter  segítségével  futnak,  ezért  nem  lehet  ôket
  231.           értelmes  assembly  utasítássorozatokká alakítani. P-kódot a
  232.           nagy  Microsoft-programok,  például  az  Excel  és a Winword
  233.           tartalmaznak,  a  Visual  Basicból fordított programok belsô
  234.           FRM-jeit a Resdump programmal lehet megtalálni.
  235.  
  236.  
  237.                         @VA visszafordítás eredménye@N
  238.  
  239.           Itt  is csak egy assembly listát kapunk eredményül, akárcsak
  240.           a  DOS  programok  esetében.  A  Windows programok a Windows
  241.           kernelt,  illetve  a  DLL-ekben  lévô rutinjaikat hosszú (32
  242.           bites)  szubrutinhívásokkal érik el. Mivel a programfordítás
  243.           idejében  ezek  a  címek  még ismeretlenek, ezért az .EXE és
  244.           .DLL   file-okba  csak  egy  jól  azonosítható  szerkesztési
  245.           (linker)   információ  kerül.  A  hivatkozások  feloldása  a
  246.           program  betöltésének  ideje  alatt  történik  meg. Az ilyen
  247.           úgynevezett  New  .EXE  file-szerkezet sokkal egyértelmûbben
  248.           visszafejthetô mint a DOS-os társaiké.
  249.  
  250.           Az  ábrán  egy  visszafejtés kis részlete látható. A Windows
  251.           API  hívások  jól azonosíthatók, a hívott rutinoknak átadott
  252.           paraméterek   (a   szubrutinhívás  elôtt  verembe  helyezett
  253.           adatok)  nevei  sajnos  nem szerepelnek. Ahol konstans érték
  254.           kerül  a  veremre, ott a WINDOWS.H-ban deklarált szimbolikus
  255.           név  megjelenítése  is  szükséges  lenne.  Mivel a Sourcer a
  256.           DOS/BIOS   hívásoknál   képes   az   átadott  paraméterekrôl
  257.           megmondani,  hogy  ki-kicsoda,  ezért a Windows változat már
  258.           használható,   de   fejlesztésre   szorul.   Az   alkotók  a
  259.           kézikönyvben   hosszú   magyarázkodásba   is  bonyolódnak  a
  260.           témáról,  sok  siker nélkül. A következô verzió remélhetôleg
  261.           már több magyarázó megjegyzést fog tartalmazni.
  262.  
  263.           Az  assembly  visszafejtésen  túl  a  Windows programok fôbb
  264.           erôforrásait  is  képes  ""kirobbantani"  a  Sourcer, azaz a
  265.           stringeket,  menüket  és a beállítóablakokat. A .BMP és .ICO
  266.           file-okat     sajnos    nem.    A    szöveges    erôforrások
  267.           módosíthatósága  fôleg  a  magyarítás  miatt  lényeges:  nem
  268.           minden  feliratot lehet hexa-editorral, helyben kicserélni a
  269.           magyar   szavak   hosszabb  volta  miatt.  Ilyenkor  csak  a
  270.           szöveges  erôforrás  és a program újrafordítása lehet csak a
  271.           megoldás.
  272.  
  273.           @KBata László@N
  274.  
  275.           @VTovábbi információk:@N
  276.           KeSzo Kft., 1055 Bp. Falk Miksa u. 6.; tel./fax: 132-8717, 111-8268
  277.           Sourcer 5.12: 17800 Ft + áfa
  278.           Sourcer és Windows Source: 24000 Ft + áfa
  279.  
  280.  
  281.  
  282. @<9408\SR1.GIF> A Sourcer bejelentkezô képernyôje@N
  283.  
  284. @<9408\SR2.GIF> Az analízis opciók menüje@N
  285.  
  286.           ┌──────────────────────────────────────────────────────────┐
  287.           │          @VEgy visszafejtett Windows programrészlet@N        │▒
  288.           │                                                          │▒
  289.           │LOC_0103:                                                 │▒
  290.           │      PUSH    WORD PTR [BP-8                              │▒
  291.           │      MOV     AX,1                                        │▒
  292.           │      PUSH    AX                                          │▒
  293.           │      CALL    FAR PTR EnableWindow                        │▒
  294.           │LOC_0104:                                                 │▒
  295.           │      PUSH    WORD PTR [BP+0EH]                           │▒
  296.           │      MOV     AX,4BAH                                     │▒
  297.           │      PUSH    AX                                          │▒
  298.           │      MOV     AX,4D8H                                     │▒
  299.           │      PUSH    AX                                          │▒
  300.           │      PUSH    DATA_0080                                   │▒
  301.           │      CALL    FAR PTR CheckRadioButton                    │▒
  302.           │                                                          │▒
  303.           │                                                          │▒
  304.           │                                                          │▒
  305.           │                                                          │▒
  306.           │                                                          │▒
  307.           │                                                          │▒
  308.           │                                                          │▒
  309.           │                                                          │▒
  310.           │                                                          │▒
  311.           │                                                          │▒
  312.           └──────────────────────────────────────────────────────────┘▒
  313.            ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒